package com.zx.JDK特性.jdk1_8.date;

import java.io.IOException;
import java.time.LocalDate;

/**
 * @Description: LocalDate(操作年月日) ，LocalDate是一个不可变类，在不考虑时区的情况下可以对日期（不包括时间）进行各种操作，它的默认格式是yyyy-MM-dd
 *         在Java8之前的版本中，我们处理时间类型常常使用的是java.util包下的Date类。
 *         但使用Date类却有诸多的弊端，如：java.util.Date是非线程安全的，所有的日期类都是可变的；
 *         日期/时间类的定义并不一致，在java.util和java.sql的包下都含有Date类，在开发过程中极易出错；
 *         日期类并不提供国际化，没有时区支持。
 *         为了解决以上问题，Java8在java.time包下提供了很多新的API，
 *         常用的类包括LocalDate、LocalTime、LocalDateTime，用以处理日期，时间，日期/时间等
 */
public class LocalDateDemo {

    public static void main(String[] args) throws IOException {
        LocalDate date = LocalDate.now();
        // 1. 获得时间
        System.out.println(date);//2019-04-05

        System.out.println(date.getYear());//2019

        System.out.println(date.getMonth());//APRIL
        System.out.println(date.getMonthValue());//4

        System.out.println(date.getDayOfMonth());//5
        System.out.println(date.getDayOfYear());//95
        System.out.println(date.getDayOfWeek());//FRIDAY

        // 2. 指定时间
        date = LocalDate.of(2018, 01, 02);
        System.out.println(date);//2018-01-02

        // 3. 比较两个时间的先后顺序以及是否相等
        LocalDate now = LocalDate.now();
        LocalDate of = LocalDate.of(2018, 01, 02);
        if (now.equals(of)) {
            System.out.println("时间相等");
        } else {
            if (now.isAfter(of)) {
                System.out.println("now在of之后");
            }
            if (now.isBefore(of)) {
                System.out.println("now在of之前");
            }
        }

        // 4. 对日期做加减运算
        LocalDate localDate = LocalDate.of(2018, 01, 02);
        System.out.println("2年后日期：" + localDate.plusYears(2));//2年后日期：2020-01-02
        System.out.println("6月后日期：" + localDate.plusMonths(6));//6月后日期：2018-07-02
        System.out.println("3周后日期：" + localDate.plusWeeks(3));//3周后日期：2018-01-23
        System.out.println("15天后日期：" + localDate.plusDays(15));//15天后日期：2018-01-17

        System.out.println("2年前日期：" + localDate.minusYears(2));//2年前日期：2016-01-02
        System.out.println("6月前日期：" + localDate.minusMonths(6));//6月前日期：2017-07-02
        System.out.println("3周前日期：" + localDate.minusWeeks(3));//3周前日期：2017-12-12
        System.out.println("15天前日期：" + localDate.minusDays(15));//15天前日期：2017-12-18

        // 5. 获取日期间隔的天数
        LocalDate ofYearDay = LocalDate.ofYearDay(2018, 100);
        System.out.println("2018年的第100天：" + ofYearDay);//2018年的第100天：2018-04-10

        System.out.println("距离1970-01-01天数： " + ofYearDay.toEpochDay());


    }

}
